AWS Elemental Linkのサムネイル画像をAWS CLI経由で取得してみた
はじめに
清水です。以前のエントリでAWS Elemental LinkをAWS CLIから操作してみた際、マネジメントコンソールから確認できるLinkデバイスのサムネイル画像(入力された映像が確認できるもの)については、コマンドが存在せずに取得することができませんでした。ですが先ほどAWS API Changesを確認していると、ちょうどこのサムネイル取得に対応するAPIアップデートがありました。DescribeInputDeviceThumbnail
というAWS Elemental MediaLiveのAPIで、2020/07/22に新規追加されたようです。
Channelリソースにアタッチされている、またはアタッチされていなくても、このAPIを利用することでサムネイルが取得できるようです。また以前はマネジメントコンソールからのみサムネイルが取得可能だった、とのことでした。
このAPIアップデートの確認ののち、AWS CLIについても確認したところ、こちらもサムネイル画像取得のコマンドが追加されていました。
AWS CLIコマンドリファレンスで確認すると、AWS CLI v2では2.0.34(2020/07/24リリース)から追加されていたようです。
- medialive — AWS CLI 2.0.33 Command Reference
- この段階では
describe-input-device-thumbnail
コマンドはまだ記載なしでした
- この段階では
- medialive — AWS CLI 2.0.34 Command Reference
- この2.0.34では
describe-input-device-thumbnail
コマンドの項目が確認できます
- この2.0.34では
本エントリではこのdescribe-input-device-thumbnail
コマンドを使って、Linkデバイスに入力している映像のサムネイル画像をAWS CLIで取得してみたのでまとめてみます。
Linkデバイスのサムネイル画像をAWS CLIから取得してみる
では実際にAWS CLIを使って、Linkデバイスのサムネイル画像をAWS CLIから取得してみます。検証に利用した環境はmacOS上のAWS CLI v2で、具体的には下記となります。
% aws --version aws-cli/2.0.38 Python/3.7.4 Darwin/19.6.0 exe/x86_64
AWS CLIコマンドリファレンスのdescribe-input-device-thumbnailのページでコマンドの詳細を確認しましょう。以下のようにデバイスID、Acceptヘッダ、そして出力ファイル名の3つを引数として必要とします。
% describe-input-device-thumbnail \ --input-device-id <value> \ --accept <value> \ <outfile>
デバイスIDはhd-
ではじまるLinkデバイスに紐づけられているIDですね。マネジメントコンソールやList系APIのほか、Linkデバイス底面に貼られているシールでも確認ができます。Acceptヘッダについてはimage/jpge
が現在指定可能な値のようです。
コマンド実行方法について確認できたので、実際のコマンド実行、サムネイル取得のための準備をします。Linkデバイスの電源をLANケーブルを接続、映像信号を入力します。映像信号について、今回はMacBook Proのデスクトップ画面をミラーリングしたものをHDMIで入力、音声もHDMI経由として、Big Bug Bunnyの4K版をVLC media playerでフルスクリーン再生しました。
マネジメントコンソールでDevicesの項目を確認すると以下の状態です。なおMediaLiveのChannelにはアタッチしていない状況となります。
いざ、describe-input-device-thumbnail
コマンドを実行してみます。
% aws medialive describe-input-device-thumbnail \ --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \ --accept image/jpeg \ /path/to/file/202008/link-thumbnail.jpg \ --region us-west-2 { "ContentType": "image/jpeg", "ContentLength": "28675", "ETag": "588bd811d73048014f9e08549b577526XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "LastModified": "2020-08-07T11:50:59+00:00" }
レスポンスとして、ContentType、ContentLength、Etag、 LastModifieのそれぞれの情報が返ります。サムネイル画像本体はAWS CLI実行環境に保存されているので確認してみましょう。以下が実際に取得したサムネイル画像ファイルです。
macOSからファイルの情報を確認すると、以下のように320x180解像度の画像であることが確認できます。
なおマネジメントコンソールから右クリックして保存した画像についても、同様に320x180の解像度でした。
Linkデバイスに映像を入力していない場合の挙動についても確認しておきましょう。AWSマネジメントコンソールでは「No preview is available」の表示になりますね。AWS CLIでdescribe-input-device-thumbnail
コマンドを実行すると、「エラーになる」ではなく、以下のようにContentLength
が0バイトでレスポンスがありました。OS側にも0バイトのファイル(ようは空のファイル)として存在はしています。
% aws medialive describe-input-device-thumbnail \ --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \ --accept image/jpeg \ /path/to/file/202008/link-thumbnail-noinput.jpg \ --region us-west-2 { "ContentType": "image/jpeg", "ContentLength": "0", "ETag": "7c036ecfd6af9123c266e3dde2878473XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "LastModified": "2020-08-07T11:56:33+00:00" }
Linkデバイスが接続されていない状態でも、同様に0バイトでのレスポンスが返る結果となりますした。実行環境へのファイルの保存も同様です。(0バイトのファイルが作成されています。)
% aws medialive describe-input-device-thumbnail \ --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \ --accept image/jpeg \ /path/to/file/202008/link-thumbnail-disconnected.jpg \ --region us-west-2 { "ContentType": "application/json", "ContentLength": "0", "ETag": "7c036ecfd6af9123c266e3dde2878473XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "LastModified": "2020-08-07T12:01:08+00:00" }
まとめ
先日アップデートされたAWS CLIのaws medialive describe-input-device-thumbnail
を使って、AWS Elemental Linkデバイスに入力されている映像のサムネイル画像を取得してみました。これまでサムネイル画像はマネジメントコンソールからのみしか取得できませんでしたが、アップデートでAPI経由でも取得できるようになったのは嬉しいですね!また私の覚えている限り、画像が取得できる2つ目のAWS CLIコマンドとなりました。1つ目はみなさまご存知のとおり、aws ec2 get-console-screenshot
コマンドですね。(【新機能】EC2コンソールのスクリーンショットを取得可能になりました | Developers.IO)aws ec2 get-console-screenshot
コマンドでは出力結果がBASE64エンコードされているので確認のため一処理必要でしたが、aws medialive describe-input-device-thumbnail
コマンドだと特に必要ないのも嬉しいなぁと思いました。